package com.ecommerce.product.domain;

import com.ecommerce.product.enums.ProductType;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.springframework.data.annotation.Id;

import java.math.BigDecimal;
import java.util.Date;

/**
 * 商品领域对象
 * <p>
 * 表示电商系统中的商品实体，包含商品的基本信息、分类信息、状态等属性。
 * 该类同时用于数据库持久化和业务逻辑处理。
 * </p>
 */
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class Product {
    /**
     * 商品唯一标识符
     * <p>
     * 使用Spring Data的@Id注解标记主键字段，
     * 兼容JPA和Spring Data的注解规范
     * </p>
     */
    @Id // 确保这是javax.persistence.Id或org.springframework.data.annotation.Id
    private Long id;

    /**
     * 商品名称
     */
    private String name;

    /**
     * 商品编码/货号
     * <p>
     * 通常为系统内部使用的唯一编码
     * </p>
     */
    private String code;

    /**
     * 商品价格
     * <p>
     * 使用BigDecimal类型确保精确计算，
     * 适用于金融相关的金额字段
     * </p>
     */
    private BigDecimal price;

    /**
     * 商品库存数量
     */
    private Integer stock;

    /**
     * 商品类型枚举
     * <p>
     * 参见{@link ProductType}枚举定义
     * </p>
     */
    private ProductType productType; // 商品类型

    /**
     * 商品状态
     * <p>
     * 1-上架(可销售)
     * 0-下架(不可销售)
     * </p>
     */
    private Integer status; // 1-上架 0-下架

    /**
     * 一级分类ID
     * <p>
     * 关联到商品分类体系中的一级分类
     * </p>
     */
    private Long categoryId; // 一级类目

    /**
     * 二级分类ID
     * <p>
     * 关联到商品分类体系中的二级分类，
     * 必须是一级分类的子分类
     * </p>
     */
    private Long subCategoryId; // 二级类目

    /**
     * 商品主图URL
     * <p>
     * 存储商品展示的主图片路径，
     * 通常用于列表页和详情页的默认展示
     * </p>
     */
    private String mainImage;

    /**
     * 商品描述信息
     * <p>
     * 包含商品的详细描述、特性等富文本内容
     * </p>
     */
    private String description;

    /**
     * 商品规格参数
     * <p>
     * 以JSON格式存储的商品规格属性，
     * 例如颜色、尺寸等动态属性
     * </p>
     */
    private String specs; // JSON格式规格参数

    /**
     * 商品创建时间
     */
    private Date createTime;

    /**
     * 商品最后更新时间
     */
    private Date updateTime;
}